package top.tagao.ref_03_classLoadUse;

import org.junit.Test;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Properties;
import java.util.stream.Stream;

/**
 * @author fu-xiao-liu  了解类的加载器
 * @Date 2022/3/24 17:37
 */
public class ClassLoaderUse {

    @Test
    public void test01() throws ClassNotFoundException {
        //1. 对于自定义类，使用系统类加载器进行加载
        ClassLoader classLoader = ClassLoaderUse.class.getClassLoader();
        System.out.println(classLoader);

        //2. 调用系统类加载器的getParent()：获取扩展类加载器
        ClassLoader classLoader1 = classLoader.getParent();
        System.out.println(classLoader1);

        //3. 调用扩展类加载器的getParent()：无法获取引导类加载器
        //引导类加载器主要负责加载java的核心类库，无法加载自定义类的。
        ClassLoader classLoader2 = classLoader1.getParent();
        System.out.println(classLoader2);

        //4. 无法直接获取引导类加载器
        ClassLoader classLoader3 = String.class.getClassLoader();
        System.out.println(classLoader3);

        //5.判断JDK内置类是那个加载器
        ClassLoader classLoader4 = Class.forName("java.lang.Object").getClassLoader();
        System.out.println(classLoader4);

        //6.获取系统类加载器可以加载的路径
        String property = System.getProperty("java.class.path");
        String[] splits = property.split(";");
        Stream.of(splits).forEach(System.out::println);

    }

    /*


     */

    /**
     * @date Properties：用来读取配置文件。
     */
    @Test
    public void test2() throws Exception {

        Properties pros = new Properties();
        //此时的文件默认在当前的module下。
        //读取配置文件的方式一：
        FileInputStream fis = new FileInputStream("src\\main\\resources\\jdbc.properties");
        pros.load(fis);
        System.out.println("user = " + pros.getProperty("user") + ",password = " + pros.getProperty("password"));


        //读取配置文件的方式二：使用ClassLoader
        //配置文件默认识别为：当前module的src下
        ClassLoader classLoader = ClassLoaderUse.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("jdbc.properties");
        pros.load(is);
        System.out.println("user = " + pros.getProperty("user") + ",password = " + pros.getProperty("password"));

    }
}
